<?php

namespace app\mobile\model;

use app\common\model\RougeUser;
use think\Exception;
use think\Session;

/**
 * 由于原系统中包括前端页面的处理都只有
 * 一级分销的逻辑，因此这里只实现一级
 * 分销的逻辑
 *
 * Class Distribution
 * @package app\mobile\model
 */
class Distribution {

    /**
     * 把该用户加入自己的上级推荐人
     * @param $out_open_id
     * @return bool
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function addChild($out_open_id) {
        $sessionM = new Session();
        $userM = new RougeUser();
        $u_id = $sessionM->get('user_id');
        // 排除当前的用户已经是推荐人或者上头已经有人的情况
        $current_user = $userM->where(['id' => $u_id])->find()->getData();
        if ($current_user['top_openid'] || $current_user['level']) {
            //die('a');
            return true;
        }

        // 该用户的直接推荐人
        $parent_user = $userM->where(['openid' => $out_open_id])->find()->getData();
        // 更新当前用户账号
        $data = $this->getUpdateData($parent_user);
        if ($res = $userM->save($data, ['id' => $u_id])) {
            return true;
        }
        //die('wa');
        return false;
    }

    /**
     * 获取用户分销相关的更新信息
     * @param $parent_user
     * @return array
     */
    private function getUpdateData($parent_user) {
        $data = [];
        if ($parent_user['level'] == RougeUser::LEVEL_NULL) { // 授权一级分销
            $data['level'] = RougeUser::LEVEL_TOP;
        } else { // 普通用户
            $data['level'] = RougeUser::LEVEL_NULL;
            $data['top_openid'] = $parent_user['openid'];
        }

        return $data;
    }
}